Cloud Scheduler から IAP 越しのアプリケーションを叩く
ゴール: AppEngine デフォルトサービスアカウントで Scheduler から IAP 超えする
IAP 超えられる roles/iap.httpsResourceAccessor ロールを付与する
https://gyazo.com/e6dbec9fb2b1fc6a066cea2009e7ad63
Editor にあるのでいらないかと思ったけど必要
Cloud Scheduler の OIDC トークン
サービスアカウントはデフォルトサービスアカウントを指定する
audience に注意!
IAP の ClientID を指定する必要がある
terraform なら
code:scheduler_iap.tf
resource "google_cloud_scheduler_job" "kick_iap" {
name = "kick-iap"
schedule = "7 11 * * *"
time_zone = var.timezone
http_target {
http_method = "POST"
oidc_token {
service_account_email = data.google_app_engine_default_service_account.default.email
audience = google_iap_client.gae_client.client_id
}
}
悲しいお知らせ
この方法で IAP を通ってくると Cloud Scheduler の OIDC Token が Auhotirzation Header から消える
IAP を通ってこれてるので既に信頼できるリクエストではあるのだが
当面社内向けに IAP かけておいて、リリース時に IAP 外す、一部のエンドポイントはリクエスト元を検証したい、というときに困る
x-goog-iap-jwt-assertion or Authorization の JWT の署名が valid なのを検証すればよいかな
IAP に Authorization を渡すなら Proxy-Authorization として渡すのか
---.icon
TODO 別の話題: デフォルトサービスアカウントから別のサービスアカウントに impersonate するときに iamcredentials.googleapis.com が必要だった